home *** CD-ROM | disk | FTP | other *** search
/ Gambler 19 / GAMBLERCD19.BIN / UTILS / RIVA128 / Uzytki / IdGamma v1.2 beta / IDGAMMA.BAS < prev    next >
BASIC Source File  |  1998-05-16  |  16KB  |  700 lines

  1. DECLARE SUB GetCommandSettings ()
  2. DECLARE SUB AdjPalette ()
  3. DECLARE SUB CheckSettings ()
  4. DECLARE SUB DoConfig ()
  5. DECLARE SUB FindPak ()
  6. DECLARE SUB GetAnswer ()
  7. DECLARE SUB GetBatSettings ()
  8. DECLARE SUB GetIdealSettings ()
  9. DECLARE SUB GetInputs ()
  10. DECLARE SUB GetOffsets ()
  11. DECLARE SUB GetPalette ()
  12. DECLARE SUB GetQ2Intensity ()
  13. DECLARE SUB Getsettings ()
  14. DECLARE SUB InitScreen ()
  15. DECLARE SUB MakePak ()
  16. DECLARE SUB PutPalette ()
  17. DECLARE SUB PutQ2intensity ()
  18. DEFDBL A-Z
  19.  
  20. CONST Quake1 = 1, Quake2 = 2, Hexen2 = 3, True = -1, False = 0
  21. CONST infile = "IDGAMMA.DAT"
  22. CONST Yes = 89, No = 78
  23. CONST Version = "Idgamma Version 1.2"
  24. DIM colors(0 TO 63, 0 TO 255) AS INTEGER
  25. DIM palet(0 TO 255, 1 TO 3) AS INTEGER
  26.  
  27. COMMON SHARED Intensity, fullbright, Game, AllowSat, Gamma, Q2Intensity, Glmodulate
  28. COMMON SHARED StartFile, StartPalette, Bytes, OutPalette, ini AS STRING
  29. COMMON SHARED p AS STRING * 768, colors() AS INTEGER, palet() AS INTEGER
  30. COMMON SHARED endtable, ch AS STRING * 1, OutFile AS STRING * 8, NoUI AS INTEGER
  31. COMMON SHARED Question$, answer AS INTEGER, Description$
  32. COMMON SHARED FoundPak AS INTEGER
  33.    
  34.  
  35.    OutFile = "PAK?.PAK"
  36.  
  37.    IF LEN(DIR$(OutFile)) OR LEN(DIR$("CONFIG.CFG")) THEN
  38.  
  39.       GetInputs
  40.  
  41.       IF Game = Quake2 THEN
  42.          IF Q2Intensity > 0 THEN PutQ2intensity
  43.          DoConfig
  44.       END IF
  45.  
  46.       GetOffsets 'get offsets in idgamma.dat
  47.  
  48.       FindPak
  49.       IF NOT FoundPak THEN MakePak
  50.  
  51.       GetPalette
  52.       AdjPalette
  53.       PutPalette
  54.  
  55.       'AdjColorTable
  56.       'PutColorTable
  57.    ELSE
  58.       InitScreen
  59.       PRINT "Cannot find any PAK files"
  60.       PRINT "This Program must be run from the same"
  61.       PRINT "directory as your PAK files or config.cfg"
  62.       PRINT "Example directories are ID1, BASEQ2 or DATA1"
  63.    END IF
  64.  
  65. SYSTEM
  66.  
  67. SUB AdjColorTable
  68.  
  69.    'make color table
  70.    LOCATE 10, 1: PRINT "Processing light level:     % complete";
  71.  
  72.    FOR h = 0 TO 63
  73.        LOCATE 10, 24: PRINT INT(1.587302 * h)
  74.        IF h = 32 THEN
  75.          FOR I = 0 TO 255
  76.             colors(h, I) = I
  77.             colors(h, I) = 15
  78.          NEXT I
  79.        ELSE
  80.          FOR I = 1 TO 255
  81.             r = palet(I, 1)
  82.             g = palet(I, 2)
  83.             b = palet(I, 3)
  84.             total = r + g + b
  85.             r = r * (64 - h) / 32
  86.             g = g * (64 - h) / 32
  87.             b = b * (64 - h) / 32
  88.  
  89.             IF r >= b AND r >= g THEN d = r / 255
  90.             IF g >= r AND g >= b THEN d = g / 255
  91.             IF b >= r AND r >= g THEN d = b / 255
  92.  
  93.             IF d > 1 THEN
  94.                r = r / d
  95.                g = g / d
  96.                b = b / d
  97.    '            r = (r + r / d) / 2
  98.    '            g = (g + g / d) / 2
  99.    '            b = (b + b / d) / 2
  100.             END IF
  101.             min = 9999
  102.             FOR j = 0 TO 255
  103.                r1 = palet(j, 1)
  104.                g1 = palet(j, 2)
  105.                b1 = palet(j, 3)
  106.                'IF total <= palet(j, 0) THEN
  107.                   dr = ((r1 - r) ^ 2 + (g1 - g) ^ 2 + (b1 - b) ^ 2) ^ .5
  108.                   IF dr < min THEN
  109.                      min = dr
  110.                      colors(h, I) = j
  111.                     ' IF min < 1 THEN EXIT FOR
  112.                   END IF
  113.                'END IF
  114.             NEXT j
  115.          NEXT I
  116.        END IF
  117.    NEXT h
  118.  
  119.  
  120. END SUB
  121.  
  122. SUB AdjPalette
  123. 'Changes the colors for brighter ones
  124.    
  125.    ax = (255 * 3) / (2 + Intensity)
  126. '   ax = 0
  127.    M = 1
  128.    IF Intensity <> 1 THEN M = (255 - ax) / (255 - ax / (Intensity))
  129.    
  130.    Bx = 255 * (1 - M)
  131.  
  132.    offset = (255 - (255 * Gamma)) / (3 * Intensity)
  133.    r0 = palet(8, 1) * Intensity
  134.    FOR I = 0 TO 255
  135.  
  136.       
  137.       r = palet(I, 1)
  138.       g = palet(I, 2)
  139.       b = palet(I, 3)
  140.    
  141.  
  142.       IF I < fullbright OR (Game = 2 AND I > 239) THEN
  143.          IF Game <> Quake2 THEN
  144.             r = r + offset
  145.             g = g + offset
  146.             b = b + offset
  147.          END IF
  148.  
  149.          Max = r
  150.          IF g > Max THEN Max = g
  151.          IF b > Max THEN Max = b
  152.  
  153.          Mult = Intensity
  154.          Max = Intensity * Max
  155.  
  156.          
  157.          SELECT CASE AllowSat
  158.          CASE IS < 3
  159.             IF AllowSat = 1 AND I > 8 AND I < 16 THEN
  160.                r = r0 + (I - 8) * (255 - r) / (255 - r0)
  161.                b = r
  162.                g = r
  163.                Mult = 1
  164.             ELSE
  165.                IF Max > 255 THEN
  166.                   Mult = Intensity * 255 / Max
  167.                   IF AllowSat = 2 THEN
  168.                      r = r * Mult + ((255 - r * Mult) / (Intensity))
  169.                      g = g * Mult + ((255 - g * Mult) / (Intensity))
  170.                      b = b * Mult + ((255 - b * Mult) / (Intensity))
  171.                      Mult = 1
  172.                   END IF
  173.                END IF
  174.             END IF
  175.          CASE IS = 3 AND Max > ax
  176.             IF AllowSat = 2 THEN
  177.                IF Max > 255 THEN
  178.                   Mult = Mult * (255 + Max + Max) / (Max + Max + Max)
  179.                END IF
  180.             END IF
  181.          END SELECT
  182.          r = r * Mult
  183.          g = g * Mult
  184.          b = b * Mult
  185.  
  186.          IF r < 0 THEN r = 0
  187.          IF g < 0 THEN g = 0
  188.          IF b < 0 THEN b = 0
  189.  
  190.          IF r > 255 THEN r = 255
  191.          IF g > 255 THEN g = 255
  192.          IF b > 255 THEN b = 255
  193.  
  194.       END IF
  195.       palet(I, 1) = r
  196.       palet(I, 2) = g
  197.       palet(I, 3) = b
  198.  
  199.    NEXT
  200.  
  201. END SUB
  202.  
  203. SUB CheckSettings
  204.  
  205.    InitScreen
  206.    PRINT Description$
  207.    PRINT
  208.    x$ = "(Quake 1)"
  209.    IF Game = Quake2 THEN x$ = "(Quake 2)"
  210.    IF Game = Hexen2 THEN x$ = "(Hexen 2)"
  211.    PRINT "               Game ="; Game; x$
  212.  
  213.    
  214.    IF Game = Quake2 THEN
  215.       PRINT "   Ref_gl Intensity =";
  216.       IF Q2Intensity = 0 THEN
  217.          PRINT " (Leave Ref_gl.dll Alone)"
  218.       ELSE
  219.          PRINT Q2Intensity
  220.       END IF
  221.    END IF
  222.    
  223.    PRINT "        gl_modulate ="; Glmodulate
  224.    PRINT "          Intensity ="; Intensity
  225.    PRINT "              Gamma ="; Gamma
  226.  
  227.    SELECT CASE AllowSat
  228.    CASE 1
  229.       x$ = "No"
  230.    CASE 2
  231.       x$ = "Little"
  232.    CASE 3
  233.       x$ = "Some"
  234.    CASE ELSE
  235.       x$ = ""
  236.    END SELECT
  237.    PRINT "           Allowsat ="; AllowSat; "(Allow " + x$ + " Saturation)"
  238.  
  239.    
  240.    PRINT "         fullbright = ";
  241.    IF fullbright = 0 THEN
  242.       PRINT "Y (Leave Fullbrights Alone)"
  243.    ELSE
  244.       PRINT "N (Don't Leave Fullbrights Alone)"
  245.    END IF
  246.    PRINT
  247.    Question$ = "Use these Values? (Y/N)"
  248.    GetAnswer
  249.  
  250. END SUB
  251.  
  252. SUB DoConfig
  253.  
  254.    filenum = FREEFILE
  255.    ch = CHR$(13)
  256.    a$ = "CONFIG"
  257.  
  258.    GOSUB DoA
  259.  
  260.    a$ = "AUTOEXEC"
  261.    GOSUB DoA
  262.  
  263.    PRINT
  264.    PRINT "CONFIG.CFG and AUTOEXEC.CFG updated."
  265.    PRINT
  266.  
  267.    EXIT SUB
  268.  
  269. DoA:
  270.    f1$ = a$ + ".IDG"
  271.    f2$ = a$ + ".CFG"
  272.    SHELL "attrib -h -s -r " + f2$
  273.    SHELL "copy " + f2$ + " " + f1$ + ">nul"
  274.  
  275.    OPEN f1$ FOR INPUT AS filenum
  276.    OPEN f2$ FOR OUTPUT AS filenum + 1
  277.    DO WHILE NOT EOF(filenum)
  278.       LINE INPUT #filenum, x$
  279.       y$ = UCASE$(LTRIM$(RTRIM$(x$)))
  280.       aa = 0
  281.       IF LEN(x$) THEN
  282.          IF INSTR(y$, "BIND") <> 1 AND MID$(y$, 1, 2) <> "//" THEN
  283.             aa = (INSTR(y$, "INTENSITY") OR INSTR(y$, "VID_GAMMA"))
  284.             aa = aa OR (Glmodulate AND (INSTR(y$, "GL_MODULATE")))
  285.          END IF
  286.       END IF
  287.       IF aa = 0 THEN
  288.          PRINT #(filenum + 1), x$
  289.       END IF
  290.    LOOP
  291.    IF a$ = "CONFIG" THEN
  292.       PRINT #(filenum + 1), "set vid_gamma"; Gamma
  293.       IF Glmodulate THEN PRINT #(filenum + 1), "set gl_modulate"; Glmodulate
  294.    END IF
  295.    CLOSE filenum
  296.    CLOSE filenum + 1
  297.    RETURN
  298.  
  299. END SUB
  300.  
  301. SUB FindPak
  302.  
  303.    c = 49  '"1"
  304.    FoundPak = False
  305.    DO
  306.       MID$(OutFile, 4, 1) = CHR$(c)
  307.       x$ = DIR$(OutFile)
  308.       IF LEN(x$) > 0 THEN
  309.          OPEN OutFile FOR BINARY AS 1
  310.          length = LOF(1)
  311.          CLOSE 1
  312.          IF length = Bytes THEN FoundPak = True
  313.       END IF
  314.       c = c + 1
  315.    LOOP UNTIL LEN(x$) = 0 OR FoundPak = True
  316.  
  317. END SUB
  318.  
  319. SUB GetAnswer
  320.    answer = 0
  321.    COLOR 15, 1
  322.    DO
  323.       PRINT Question$;
  324.       COLOR 14, 1
  325.       INPUT y$
  326.       PRINT
  327.  
  328.       IF LEN(y$) THEN answer = ASC(UCASE$(RTRIM$(LTRIM$(y$))))
  329.  
  330.    LOOP UNTIL answer = Yes OR answer = No
  331. END SUB
  332.  
  333. SUB GetcolorTable
  334.  
  335.  
  336. CONST colormap = "COLORMAP.LMP"
  337.  
  338. '   IF DIR$(colormap) <> colormap THEN
  339.  
  340.       OPEN "COLORMAP.PCX" FOR BINARY AS 1
  341.       x$ = ""
  342.       I = 129
  343.       DO
  344.          GET #1, I, ch
  345.          IF ch = "┴" THEN
  346.             I = I + 1
  347.             GET #1, I, ch
  348.          END IF
  349.          x$ = x$ + ch
  350.          I = I + 1
  351.       LOOP UNTIL LEN(x$) = 16385
  352.  
  353.       OPEN colormap FOR OUTPUT AS #2
  354.       PRINT #2, x$;
  355.       CLOSE
  356.       endtable = I
  357. '   END IF
  358.  
  359. END SUB
  360.  
  361. SUB GetCommandSettings
  362.    ini = COMMAND$
  363.    IF LEN(ini) THEN
  364.       filenum = FREEFILE
  365.       Description$ = ini
  366.       ch = MID$(ini, 1, 1)
  367.       IF ch = "#" OR ch = "[" THEN
  368.          IF ch = "#" THEN
  369.             NoUI = True
  370.             Description$ = MID$(ini, 2)
  371.          END IF
  372.          ini = "IDGAMMA.INI"
  373.          OPEN ini FOR OUTPUT AS filenum
  374.          PRINT #filenum, Description$
  375.          CLOSE #filenum
  376.       END IF
  377.       IF DIR$(ini) <> ini THEN PRINT ini; " not found": SYSTEM
  378.  
  379.       OPEN ini FOR INPUT AS filenum
  380.  
  381.       INPUT #filenum, Description$, Game, Q2Intensity, Glmodulate, Intensity, Gamma, AllowSat, fullbright
  382.       CLOSE filenum
  383.    END IF
  384.  
  385. END SUB
  386.  
  387. SUB GetIdealSettings
  388.  
  389.    fullbright = 1
  390.       Description$ = "Default Ideal Settings"
  391.       IF Game = Quake2 THEN
  392.          Q2Intensity = 1
  393.          Glmodulate = 2
  394.          Intensity = VAL("2")
  395.          Gamma = VAL(".8")
  396.          AllowSat = 1
  397.       ELSE
  398.          Intensity = VAL("1.5")
  399.          Gamma = VAL(".95")
  400.          AllowSat = 3
  401.       END IF
  402. END SUB
  403.  
  404. SUB GetInputs
  405.  
  406.    IF DIR$(infile) = infile THEN
  407.   
  408.  
  409.       OPEN infile FOR BINARY AS #1
  410.  
  411.       Q2Intensity = False
  412.       GET #1, 98695, Game
  413.       GET #1, , Q2Intensity
  414.       GET #1, , Glmodulate
  415.       GET #1, , Intensity
  416.       GET #1, , Gamma
  417.       GET #1, , AllowSat
  418.       GET #1, , fullbright
  419.  
  420.       NoUI = False
  421.       GetCommandSettings
  422.       IF NoUI = False THEN
  423.          DO
  424.             CheckSettings
  425.             IF answer = Yes THEN EXIT DO
  426.  
  427.             InitScreen
  428.             DO
  429.  
  430.                PRINT "Enter Game, (Quake1=1, Quake2=2, Hexen2=3)"
  431.                COLOR 15, 1
  432.                PRINT "Game"; Game;
  433.                COLOR 14, 1
  434.                INPUT offset
  435.             LOOP UNTIL offset > -1 AND offset < 4
  436.             IF offset THEN Game = CINT(offset)
  437.  
  438.             PRINT
  439.             Question$ = "Use Preselected Ideal Settings? (Y/N)"
  440.             GetAnswer
  441.             IF answer = Yes THEN
  442.                GetIdealSettings
  443.             ELSE
  444.                Getsettings
  445.             END IF
  446.          LOOP
  447.       END IF
  448.       PUT #1, 98695, Game
  449.       PUT #1, , Q2Intensity
  450.       PUT #1, , Glmodulate
  451.       PUT #1, , Intensity
  452.       PUT #1, , Gamma
  453.       PUT #1, , AllowSat
  454.       PUT #1, , fullbright
  455.       CLOSE
  456.    ELSE
  457.       PRINT "Cannot find IDgamma.dat": SYSTEM
  458.    END IF
  459.  
  460.    IF fullbright = 0 THEN
  461.       IF Game = Quake1 THEN fullbright = 224
  462.       IF Game = Quake2 THEN fullbright = 208
  463.       IF Game = Hexen2 THEN fullbright = 240
  464.    ELSE
  465.       fullbright = 257
  466.    END IF
  467.  
  468. Getinput:
  469.  
  470.  
  471. END SUB
  472.  
  473. SUB GetOffsets
  474.  
  475. 'get offsets in idgamma.dat
  476.  
  477.  
  478.    IF Game = Quake2 THEN
  479.       Bytes = 97004
  480.       StartPalette = 96940
  481.       StartFile = 769
  482.       OutPalette = 96172
  483.    ELSE
  484.       Bytes = 844
  485.       StartFile = 97773
  486.       StartPalette = 97785
  487.       OutPalette = 13
  488.       IF Game = Quake1 THEN StartPalette = 1
  489.    END IF
  490.  
  491.  
  492. END SUB
  493.  
  494. SUB GetPalette
  495.  
  496.    OPEN infile FOR BINARY AS 1
  497.    GET #1, StartPalette, p
  498.    CLOSE
  499.  
  500.    I = 0
  501.    k = 0
  502.    DO
  503.       FOR j = 1 TO 3
  504.          palet(I, j) = ASC(MID$(p, k + j, 1))
  505.       NEXT
  506.       I = I + 1
  507.       k = k + 3
  508.    LOOP UNTIL I >= 255
  509.  
  510. END SUB
  511.  
  512. SUB GetQ2Intensity
  513. DIM x AS STRING * 5
  514.    Q2Intensity = 0
  515.    IF LEN(DIR$("..\REF_GL.DLL")) THEN
  516.       filenum = FREEFILE
  517.       OPEN "..\REF_GL.DLL" FOR BINARY ACCESS READ AS filenum
  518.       GET filenum, 160165, x
  519.       CLOSE filenum
  520.  
  521.       IF x = "inten" THEN
  522.          PRINT
  523.          PRINT "Enter Quake2 Default intensity (See Idgamma.txt for details)"
  524.          PRINT "Recommend Default intensity set to 1"
  525.          PRINT "Press enter to leave REF_GL.DLL alone"
  526.          COLOR 15, 1
  527.          PRINT "Default Intensity";
  528.          COLOR 14, 1
  529.          INPUT offset
  530.          IF offset THEN
  531.             IF offset < 0 OR offset > 10 THEN offset = 1
  532.             Q2Intensity = CINT(offset * 10) / 10
  533.          END IF
  534.       ELSE
  535.          PRINT "REF_GL.DLL corrupt or wrong version"
  536.       END IF
  537.    ELSE
  538.       PRINT "Cannot find REF_GL.DLL"
  539.    END IF
  540. END SUB
  541.  
  542. SUB Getsettings
  543.  
  544.    IF Game = Quake2 THEN
  545.       GetQ2Intensity
  546.  
  547.       PRINT
  548.       PRINT "Enter gl_modulate, (1 = original, 2.5 is brighter)"
  549.       COLOR 15, 1
  550.       PRINT "glmodulate"; Glmodulate;
  551.       COLOR 14, 1
  552.       INPUT offset
  553.       IF offset THEN
  554.          Glmodulate = offset
  555.       END IF
  556.    END IF
  557.  
  558.    PRINT
  559.    PRINT "Enter Intensity, (1 = original, 2.5 is brighter)"
  560.    COLOR 15, 1
  561.    PRINT "Intensity"; Intensity;
  562.    COLOR 14, 1
  563.    INPUT offset
  564.    IF offset THEN Intensity = offset
  565.  
  566.    PRINT
  567.    PRINT "Enter Gamma, (1 = original, .8 is lighter)"
  568.    PRINT "for quake2 use console vid_gamma instead"
  569.    COLOR 15, 1
  570.    PRINT "Gamma"; Gamma;
  571.    COLOR 14, 1
  572.    INPUT offset
  573.    IF offset THEN Gamma = offset
  574.  
  575.    PRINT
  576.  
  577.    PRINT
  578.  
  579.    PRINT "Saturation is when brighter colors are replaced with white."
  580.    PRINT "   / 1 = No     Saturation  3 = Some  Saturation  \"
  581.    PRINT "   \ 2 = Little Saturation  4 = Allow Saturation /"
  582.    COLOR 15, 1
  583.    PRINT "Allow Saturation"; AllowSat;
  584.    COLOR 14, 1
  585.    INPUT offset
  586.    IF offset THEN AllowSat = offset
  587.  
  588.    PRINT
  589.  
  590.    IF fullbright = 0 THEN x$ = "y)" ELSE x$ = "n)"
  591.    PRINT "Some Fullbrights are used for explosions and fire"
  592.    COLOR 15, 1
  593.    PRINT "Leave fullbrights Alone? (y/n) ("; x$;
  594.    COLOR 14, 1
  595.    INPUT x$
  596.    IF LEN(x$) > 0 AND Game < 4 THEN
  597.       IF LCASE$(MID$(x$, 1, 1)) = "y" THEN
  598.          fullbright = 0
  599.       ELSE
  600.          fullbright = 1
  601.       END IF
  602.    END IF
  603. END SUB
  604.  
  605. SUB InitScreen
  606.    COLOR 15, 1: CLS
  607.    PRINT Version: PRINT
  608.    COLOR 14, 1
  609. END SUB
  610.  
  611. SUB MakePak
  612.  
  613.  
  614.  
  615. DIM hdr AS STRING * 128
  616.    
  617.  
  618.    OPEN infile FOR BINARY AS 1
  619.  
  620.  
  621.    OPEN OutFile FOR OUTPUT AS 2
  622.  
  623.    SEEK #1, StartFile
  624.  
  625.    loops = Bytes \ 8192
  626.    IF loops THEN
  627.       x$ = SPACE$(8192)
  628.       DO WHILE loops
  629.          GET #1, , x$
  630.          loops = loops - 1
  631.          PRINT #2, x$;
  632.       LOOP
  633.    END IF
  634.    rest = Bytes - SEEK(2) + 1
  635.  
  636.    IF rest THEN
  637.       x$ = SPACE$(rest)
  638.       GET #1, , x$
  639.       PRINT #2, x$;
  640.    END IF
  641.    CLOSE
  642.       
  643.  
  644. END SUB
  645.  
  646. SUB PutColorTable
  647.  
  648.  
  649. FOR h = 0 TO 63
  650.     FOR I = 0 TO 255
  651.       x$ = x$ + CHR$(colors(h, I))
  652.     NEXT I
  653. NEXT h
  654.  
  655. OPEN "gfx\colormap.lmp" FOR OUTPUT AS #1
  656. PRINT #1, x$;
  657. CLOSE
  658.  
  659. END SUB
  660.  
  661. SUB PutPalette
  662.  
  663.  
  664.    I = 0
  665.    k = 0
  666.    DO
  667.       FOR j = 1 TO 3
  668.           MID$(p, j + k, 1) = CHR$(palet(I, j))
  669.       NEXT
  670.       I = I + 1
  671.       k = k + 3
  672.    LOOP UNTIL I >= 255
  673.  
  674.  
  675.    OPEN OutFile FOR BINARY AS 1
  676.    PUT #1, OutPalette, p
  677.    CLOSE
  678.  
  679. PRINT OutFile; " created."
  680.  
  681. END SUB
  682.  
  683. SUB PutQ2intensity
  684.  
  685.    filenum = FREEFILE
  686.    OPEN "..\REF_GL.DLL" FOR BINARY AS filenum
  687.  
  688.    ch = CHR$(0)
  689.    y$ = STR$(Q2Intensity)
  690.    MID$(y$, 1, 1) = ch
  691.    DO
  692.       y$ = y$ + ch
  693.    LOOP UNTIL LEN(y$) = 5
  694.  
  695.    PUT filenum, 160176, y$
  696.    CLOSE filenum
  697.  
  698. END SUB
  699.  
  700.